package com.obelisco.modelo.servicios.seguridad;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;

import com.obelisco.exception.ObeliscoException;
import com.obelisco.modelo.dao.IGrupoDAO;
import com.obelisco.modelo.dao.IRolDAO;
import com.obelisco.modelo.dao.IUsuarioDAO;
import com.obelisco.modelo.data.Grupo;
import com.obelisco.modelo.data.Rol;
import com.obelisco.modelo.data.Usuario;

public class ServicioAdministrarGrupos implements
		IServicioAdministrarGrupos {

	private IUsuarioDAO usuarioDAO;
	
	private IGrupoDAO grupoDAO;

	public List<Grupo> buscarGrupos() {
		// TODO Auto-generated method stub
		List lista = grupoDAO.loadAll();
		for (Iterator iter=lista.iterator(); iter.hasNext(); ) {
			Grupo grupo = (Grupo)iter.next();
			grupo.getUsuarios().size();
		}
		return lista;
	}

	public List<Grupo> buscarGruposPorPropiedad(String campo, Object objeto) {
		// TODO Auto-generated method stub
		return grupoDAO.loadAll();
	}
	
	public void eliminarGrupo(Grupo grupo) {
			grupoDAO.delete(grupo);
	}
	
	public void guardarGrupo(Grupo grupo) {
		grupoDAO.save(grupo);
	}

	public IUsuarioDAO getUsuarioDAO() {
		return usuarioDAO;
	}

	public void setUsuarioDAO(IUsuarioDAO usuarioDAO) {
		this.usuarioDAO = usuarioDAO;
	}
	
	public Grupo buscarGrupo(Grupo grupo)
	{
		Session session = grupoDAO.getSessionFactory().getCurrentSession();
		/*String hql = "from Decanato dec where" +		
		" coalesce(dec.decano,'') <> '' " +
		" and coalesce(dec.coordpostgrado,'') <> '' " +
		" and coalesce(dec.coordextension,'') <> '' " +
		" and coalesce(dec.coordinvestigacion,'') <> '' " +
		" and coalesce(dec.jeferegistroacademico,'') <> '' " +
		" and dec.estado='A'";*/
		String hql = "from Grupo grp where" +		
		" grp.estado='A'" +
		" and grp.id.nombre=:nombre" +
		" and grp.id.sistema=:sistema";
		Query query = session.createQuery(hql);
		query.setString("nombre", grupo.getId().getNombre());
		query.setEntity("sistema", grupo.getId().getSistema());
		List lista = query.list();
		if (lista.size() > 0)
		{
			Grupo nvoGrupo = (Grupo) lista.get(0);
			nvoGrupo.getUsuarios().size();
			return nvoGrupo;
		}
		else
		{
			return null;
		}		
	}

	public List<Usuario> buscarUsuariosDisponibles(Grupo grupo) {
		// TODO Auto-generated method stub
		List todos = usuarioDAO.loadAll();
		List disponibles = new ArrayList();

		for (Iterator i = todos.iterator(); i.hasNext();) {
			Usuario usuarioABuscar = (Usuario) i.next();

			boolean existe = false;
			
			//grupo = buscarGrupo(grupo);
			for (Iterator j = grupo.getUsuarios().iterator(); j.hasNext();) {
				Usuario usuario = (Usuario) j.next();
				if (usuario.getLogin().equals(usuarioABuscar.getLogin())) {
					existe = true;
					break;
				}
			}

			if (!existe)
				disponibles.add(usuarioABuscar);

		}

		return disponibles;

	}

	public IGrupoDAO getGrupoDAO() {
		return grupoDAO;
	}

	public void setGrupoDAO(IGrupoDAO grupoDAO) {
		this.grupoDAO = grupoDAO;
	}

}
